/*
 * FreeRTOS V202012.00
 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * http://www.FreeRTOS.org
 * http://aws.amazon.com/freertos
 *
 * 1 tab == 4 spaces!
 */


#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

/*-----------------------------------------------------------
 * Application specific definitions.
 *
 * These definitions should be adjusted for your particular hardware and
 * application requirements.
 *
 * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
 * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
 *
 * See http://www.freertos.org/a00110.html
 *----------------------------------------------------------*/

/* Ensure stdint is only used by the compiler, and not the assembler. */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
    #include <stdint.h>
    extern uint32_t SystemCoreClock;
#endif

#define configUSE_PREEMPTION            1   // 启用抢占式调度
#define configUSE_IDLE_HOOK             0   // 禁用空闲任务钩子函数(1为启用)
#define configUSE_TICK_HOOK             0   // 禁用时钟节拍钩子函数(1为启用)
#define configCPU_CLOCK_HZ              ( SystemCoreClock )  // 系统时钟频率
#define configTICK_RATE_HZ              ( ( TickType_t ) 1000 )  // 系统节拍频率(1kHz)
#define configMAX_PRIORITIES            ( 5 )  // 最大任务优先级数
#define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 32 )  // 空闲任务最小堆栈大小
#define configTOTAL_HEAP_SIZE           ( ( size_t ) ( 1024 ) )  // 系统堆总大小(2KB)
#define configMAX_TASK_NAME_LEN         ( 10 )  // 任务名称最大长度
#define configUSE_TRACE_FACILITY        1   // 启用可视化跟踪调试
#define configUSE_16_BIT_TICKS          0   // 使用32位系统节拍计数器
#define configIDLE_SHOULD_YIELD         1   // 空闲任务主动让出CPU
#define configUSE_MUTEXES               1   // 启用互斥量
#define configQUEUE_REGISTRY_SIZE       8   // 队列注册表大小
#define configCHECK_FOR_STACK_OVERFLOW  0   // 禁用堆栈溢出检查(2为深度检查)
#define configUSE_RECURSIVE_MUTEXES     1   // 启用递归互斥量
#define configUSE_MALLOC_FAILED_HOOK    0   // 禁用内存分配失败钩子(1为启用)
#define configUSE_APPLICATION_TASK_TAG  0   // 禁用任务标签功能
#define configUSE_COUNTING_SEMAPHORES   1   // 启用计数信号量
#define configGENERATE_RUN_TIME_STATS   0   // 禁用运行时统计

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES       0   // 禁用协程功能(1为启用)
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )  // 协程最大优先级数

/* Software timer definitions. */
#define configUSE_TIMERS                0   // 启用软件定时器功能
#define configTIMER_TASK_PRIORITY       ( 2 )  // 定时器服务任务优先级
#define configTIMER_QUEUE_LENGTH        10  // 定时器命令队列长度
#define configTIMER_TASK_STACK_DEPTH    ( configMINIMAL_STACK_SIZE * 2 )  // 定时器任务堆栈深度

/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet        0   // 包含任务优先级设置API
#define INCLUDE_uxTaskPriorityGet       0   // 包含获取任务优先级API  
#define INCLUDE_vTaskDelete             0   // 包含删除任务API
#define INCLUDE_vTaskCleanUpResources   0   // 包含清理任务资源API
#define INCLUDE_vTaskSuspend            0   // 包含挂起任务API
#define INCLUDE_vTaskDelayUntil         0   // 包含绝对延时API
#define INCLUDE_vTaskDelay              1   // 包含相对延时API

/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
    /*__BVIC_PRIO_BITS will be specified when CMSIS is being used. */
    #define configPRIO_BITS             __NVIC_PRIO_BITS
#else
    #define configPRIO_BITS             4        /* 15 priority levels */
#endif

/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY         0xf

/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5


/* 内核端口层使用的中断优先级。这些对所有Cortex-M端口都是通用的，不依赖于任何特定的库函数。*/

#define configKERNEL_INTERRUPT_PRIORITY         ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY    ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
//#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }

/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

#endif /* FREERTOS_CONFIG_H */

